"""
@Author  : 康帅
@Time    : 2021/4/17 13:55
@Function: elasticsearch
"""
from elasticsearch import Elasticsearch
import pprint

print = pprint.pprint
es = Elasticsearch()

"""
1.使用python对接elasticsearch务必需要将服务器上的elasticsearch服务给起来
2.进入到elasticsearch/bin文件夹下，./elasticsearch启动服务
3.中文分词器安装./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip
"""


"""创建"""
# result = es.indices.create(index='news', ignore=400)
# print(result)
# {'acknowledged': True, 'shards_acknowledged': True, 'index': 'news'}
# acknowledged字段标书创建操作执行成功

"""删除"""
# result = es.indices.delete(index='news', ignore=[400, 404])
# print(result)

"""插入数据"""
# es.indices.create(index='news', ignore=400)
# data = {
#     'title': '美国留给伊拉克的是个烂摊子吗',
#     'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm'
# }
# index 参数代表了索引名称
# doc_type 代表了文档类型
# body 则代表了文档具体内容
# id 则是数据的唯一标识 ID
# result = es.create(index='news', doc_type='politics', id=1, body=data)
# print(result)

# 结果描述:
# 结果中 result字段为created，代表该数据插入成功
# 也可以换种方式去插入数据,create是对index这种方法的封装
# index可以完成两种操作:1创建2如果存在则更新，如果不存在则创建
# result = es.index(index='news', doc_type='politics', body=data)
# print(result)

"""更新数据"""
# data = {
#     'title': '美国留给伊拉克的是个烂摊子吗',
#     'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm',
#     'date': '2011-12-16',
# }
# result = es.index(index='news', doc_type='politics', body=data, id=6)
# result = es.update(index='news', doc_type='politics', body=data, id=6)
# print(result)

"""使用分词插件"""
mapping = {
    'properties': {
        'title': {
            'type': 'text',
            'analyzer': 'ik_max_word',
            'search_analyzer': 'ik_max_word'
        }
    }
}

# es.indices.delete(index='news', ignore=[400, 404])
# es.indices.create(index='news', ignore=400)
# result = es.indices.put_mapping(index='news', doc_type='politics', body=mapping, ignore=400)
# print(result)
datas = [
    {
        'title': '美国留给伊拉克的是个烂摊子吗',
        'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm',
        'date': '2011-12-16'
    },
    {
        'title': '公安部：各地校车将享最高路权',
        'url': 'http://www.chinanews.com/gn/2011/12-16/3536077.shtml',
        'date': '2011-12-16'
    },
    {
        'title': '中韩渔警冲突调查：韩警平均每天扣1艘中国渔船',
        'url': 'https://news.qq.com/a/20111216/001044.htm',
        'date': '2011-12-17'
    },
    {
        'title': '中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首',
        'url': 'http://news.ifeng.com/world/detail_2011_12/16/11372558_0.shtml',
        'date': '2011-12-18'
    }
]

# for data in datas:
#     es.index(index='news', doc_type='politics', body=data)

# result = es.search(index='news', doc_type='politics')
# print(result)

# 全文检索
dsl = {
    'query': {
        'match': {
            'title': '中国 领事馆'
        }
    }
}
result = es.search(index='news', doc_type='politics', body=dsl)
print(result)
